/**
 * 
 */
package com.nari.baseinfo.dao;

import java.util.List;
import java.util.Map;

import com.nari.baseinfo.model.IBuildingUnit;
import com.nari.coreframe.dao.hibernate3.IGenericDao;
import com.nari.platform.model.ResponseMsg;

/**
 * 
 * @author Xiaopeng
 * @date 2013-8-1
 */
public interface IBuildingUnitDao extends IGenericDao<IBuildingUnit, String> {

	/**
	 * 根据楼栋唯一标识查询单元列表
	 * @param buildingUID 楼栋唯一标识，若不存在，则返回空
	 * @param unitName 单元名称(可选)
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-8
	 */
	public List<IBuildingUnit> queryUintListByBuildingUID(String buildingUID,
			String unitName) throws Exception;

	/**
	 * 通过楼栋唯一标识删除其对应的楼栋单元信息
	 * @param buildingUID
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-12
	 */
	public void deleteUnitByBuildingUID(String buildingUID) throws Exception;

	/**
	 * 通过楼栋单元ID列表查询楼栋单元信息
	 * @param idList 楼栋单元ID列表，若列表为空，则返回空列表
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-13
	 */
	public List<IBuildingUnit> queryBuildingUnitByIDList(List<String> idList) throws Exception;

	/**
	 * 通过楼栋单元ID列表查询楼栋单元ID-楼栋单元名称映射表
	 * @param idList 楼栋单元ID列表，若列表为空，则返回一个空映射表
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-13
	 */
	public Map<String, String> queryIdNameMapByIDList(List<String> idList) throws Exception;
	
	/**
	 * 根据所属楼栋编号、单元号查询对应的单元信息
	 * @param unitName
	 * @param buildingID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-1-12
	 */
	public IBuildingUnit queryUnitInfoByUnitName(String unitName, String buildingID) throws Exception;

	/**
	 * 根据楼栋单元ID级联删除关联信息
	 * 包括：单元、热用户、系统用户及角色、分配表、散热器、用户分摊账单
	 * 注意：热量表数据、分配表数据等表计数据具有不可恢复性，因此不能作为级联删除的对象
	 * @param unitUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-1-20
	 */
	public ResponseMsg deleteCascadeByUnitUID(String unitUID) throws Exception;
	
	/**
	 * 统计同一楼栋相同单元名的个数，避免同一楼栋中录入重复的单元名
	 * @param unitName
	 * @param buildingID
	 * @param unitUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-1-23
	 */
	public int countByUnitName(String unitName, String buildingUID, 
			String unitUID) throws Exception;
}
